//////////////////////////////////////////////////////////////////////////////
//       Copyright (c) 2003 - RealTime Gaming.  All rights reserved.        //
//////////////////////////////////////////////////////////////////////////////

#ifndef STRTABLE_H
#define STRTABLE_H

//////////////////////////////////////////////////////////////////////////////
// Includes
//////////////////////////////////////////////////////////////////////////////
#include "ustring.h"
#include "hashtable.h"
#include "LocaleFormatter.h"
#include "KeywordSubstitutor.h"

//////////////////////////////////////////////////////////////////////////////
// Declare Namespace
//////////////////////////////////////////////////////////////////////////////
namespace Library
{

//////////////////////////////////////////////////////////////////////////////
/// StringTable class. Encapsulates the stringtable resource.
//////////////////////////////////////////////////////////////////////////////
class PLIBEXP StrTable
{
// Public Interface
public:
	// Construction/Destruction
	StrTable( KeywordSubstitutor* pSubstitutor, LocaleFormatter* pFormatter );
	~StrTable();

	// Methods
	void     Clear();
	bool8    LoadFromResource( const String& sTableName );
	bool8    LoadFromBinary( void* pResData );
	void     AddRef();
	void     Release();
	uint32   GetRefCount();
	
	bool8 AddString( const String& sShortName, const String& string );
	bool8 RemoveString( const String& sShortName  );

	const String& GetString( const String& sShortName ) const;
	
	const String& GetName() const;
	void          SetName( const String& sName );

// Members
protected:
	HashTable<String*>*  m_pTable;			/**< Internal Hash Table                   */
	uint32               m_nRefCount;		/**< Ref Count - used with StrTableMgr     */
	String               m_sTableName;		/**< Stored name of the string table       */
	String				 m_sEmpty;			/**< Empty string, when request not found  */
    KeywordSubstitutor*  m_pSubstitutor;    /**< Internal pointer to keyword sub       */
    LocaleFormatter*     m_pFormatter;      /**< Internal pointer to locale formatter  */

private:
    // Hide the default constructor, you must use the constructor above!!!
    StrTable() {};
};

} // namespace Library

#endif // #ifndef STRTABLE_H
